﻿using System;
using System.Collections.Generic;
using System.Text;
using BarCode.Common;
using BarCode.Module;
using BarCode.AccessDao;
using BarCode.Bean;

namespace BarCode.Module
{
    public class modMain
    {
        private static readonly log4net.ILog LogUtil = log4net.LogManager.GetLogger(typeof(modMain));

        public static int loadApp()
        {
            
            // 加载数据库
            ConfigMdbDao configMdbDao = new ConfigMdbDao();
            TmpOutRoomMdbDao tmpOutRoomMdbDao = new TmpOutRoomMdbDao();

            // 读取Ip配置信息
            GlobalVal.ipAddressInfo = configMdbDao.getIPAddressData();
            if (GlobalVal.ipAddressInfo == null)
            {
                LogUtil.Error("Ip配置数据读取失败！");
                return Consts.RET_FAIL;
            }

            // 获取生产线编号
            GlobalVal.Line_No = configMdbDao.getLineNo();
            if (String.IsNullOrEmpty(GlobalVal.Line_No))
            {

                LogUtil.Error("生产线编号读取失败！");
                return Consts.RET_FAIL;
            }

            IniFileHelper.IniFile();
            // 读取启动加载数据标志
            IniFileHelper.ReadLoadServerDataFlag();

            // 读取MySql数据库信息
            GlobalVal.serverMysqlInfo = IniFileHelper.ReadMySqlAccessInfo("MySql");
            if (GlobalVal.serverMysqlInfo == null)
            {
                LogUtil.Error("数据库配置数据读取失败！");
                MessageUtil.Error("INI配置文件读取失败！");
                return Consts.RET_FAIL;
            }
            // 机芯机壳
            if ("0003".Equals(GlobalVal.Line_No) || "0007".Equals(GlobalVal.Line_No))
            {
                GlobalVal.JXJKMySQLInfo = IniFileHelper.ReadMySqlAccessInfo("JXJKMySql");
                if (GlobalVal.JXJKMySQLInfo == null)
                {
                    LogUtil.Error("数据库配置数据读取失败！");
                    MessageUtil.Error("INI配置文件读取失败！");
                    return Consts.RET_FAIL;
                }
            }

            // 获取数据库系统时间差
            GlobalVal.Diff_Hour = IniFileHelper.getDiffHour(); 
            // 获取计算工作量的开始时间
            GlobalVal.WORK_START_TIME = IniFileHelper.getWorkStartTime() + "00";

            // 服务器数据库
            DB01Dao db01 = new DB01Dao(GlobalVal.ipAddressInfo.SERVICE_IP, GlobalVal.serverMysqlInfo.USERID, GlobalVal.serverMysqlInfo.USERPWD);
            if (db01.EnableConnect())
            {
                GlobalVal.bolNetConnect = true;
                int delCnt = 0;
                if ("1".Equals(GlobalVal.LoadUsers))
                {
                    // 删除本地非管理员用户信息
                    delCnt = configMdbDao.deleteNotAdminUser();
                    LogUtil.Debug("删除本地非管理员用户信息件数：" + delCnt);
                    // 从服务器获取用户数据
                    List<UserBean> lstUser = db01.getUserInfo(GlobalVal.Line_No);
                    // 插入本地数据库
                    int userCnt = configMdbDao.insertUsers(lstUser);
                    LogUtil.Debug("插入用户数据信息件数：" + userCnt);
                }

                // 获取偏移量信息
                GlobalVal.offSetInfo = db01.getOffSetInfo();

                if ("1".Equals(GlobalVal.LoadLicence))
                {
                    // 删除本地的车辆牌照信息
                    delCnt = tmpOutRoomMdbDao.deleteLicenceInfo();
                    LogUtil.Debug("删除本地的车辆牌照信息件数：" + delCnt);

                    // 从服务器获获取车辆牌照信息
                    List<LicenceInfo> lstLicence = db01.getLicenceInfo();
                    // 插入本地数据库
                    int licenceCnt = tmpOutRoomMdbDao.insertLicence(lstLicence);
                    LogUtil.Debug("插入车辆牌照信息件数：" + licenceCnt);
                }

                if ("1".Equals(GlobalVal.LoadMnoprnPre))
                {
                    // 删除本地的待水密封箱表信息
                    delCnt = tmpOutRoomMdbDao.deleteMnoprnPreInfo();
                    LogUtil.Debug("删除本地的待水密封箱表信息件数：" + delCnt);

                    // 从服务器获待水密封箱表信息
                    List<MnoprnPreInfo> lstMnoprnPre = db01.getMnoprnPreInfo();
                    // 插入本地数据库
                    int MnoprnPreCnt = tmpOutRoomMdbDao.insertMnoprnPre(lstMnoprnPre);
                    LogUtil.Debug("插入待水密封箱表信息件数：" + MnoprnPreCnt);
                }

                if ("1".Equals(GlobalVal.LoadZjmfPre))
                {
                    // 删除本地的待终检密封箱表信息
                    delCnt = tmpOutRoomMdbDao.deleteZjmfPreInfo();
                    LogUtil.Debug("删除本地的待终检密封箱表信息件数：" + delCnt);

                    // 从服务器获待终检密封箱表信息
                    List<ZjmfPreInfo> lstZjmfPre = db01.getZjmfPreInfo();
                    // 插入本地数据库
                    int ZjmfPreCnt = tmpOutRoomMdbDao.insertZjmfPre(lstZjmfPre);
                    LogUtil.Debug("插入待终检密封箱表信息件数：" + ZjmfPreCnt);
                }

                if ("1".Equals(GlobalVal.LoadCustomer))
                {
                    // 删除本地的客户信息
                    delCnt = tmpOutRoomMdbDao.deleteCustomerInfo();
                    LogUtil.Debug("删除本地的客户信息件数：" + delCnt);

                    // 从服务器获客户信息
                    List<CustomerInfo> lstCustomer = db01.getCustomerInfo();
                    // 插入本地数据库
                    int CustomerCnt = tmpOutRoomMdbDao.insertCustomer(lstCustomer);
                    LogUtil.Debug("插入客户信息件数：" + CustomerCnt);
                }

                tmpOutRoomMdbDao.Release();
                configMdbDao.Release();

                GlobalVal.bolUploadSubMain = true;
                switch (GlobalVal.Line_No)
                {
                    case "0001":
                        // 上传大拉杆生产线数据
                        modeFunction.upload_Data("base");
                        break;
                    case "0003":
                        // 上传机芯机壳生产线数据
                        modeFunction.Upload_JxJkData();
                        break;
                    case "0005":
                        // 上传封箱条码信息
                        modeFunction.Upload_PackData(5);
                        break;
                    case "0007":
                        // 上传机壳生产线数据
                        modeFunction.upload_Data("jk");
                        break;
                    default:
                        break;
                }
            }
            else
            {
                // 获取偏移量信息
                GlobalVal.offSetInfo = new OffSetInfo();
                GlobalVal.offSetInfo.Init();
                GlobalVal.bolNetConnect = false;
            }
           
            return Consts.RET_SUCCESS;
        }

    }
}
